#ifndef _COMMON_TYPES_H_
#define _COMMON_TYPES_H_

/* 
*   该文件用于存放客户端、服务器均需要使用的公共数据类型
*   如：发送、接收数据格式， 标识常量定义等
*/

// 命令类型
typedef enum {
    CD, 
    LS, 
    PWD, 
    PUTS, 
    GETS, 
    REMOVE, 
    RM,                 // REMOVE命令的别名
    MKDIR, 
    N_CMD,              // 支持命令总数 
    INVALID_CMD,        // 无效命令 
} CMD_TYPE;

// 文件类型
typedef enum {
    NORMAL_FILE,        // 普通文件
    DIRECTORY,          // 目录、文件夹
    N_FILE_TYPE,        // 支持的文件类型数量 
    UNKNOWN,            // 未知类型 
} FILE_TYPE;

// ls命令的查找结果中的单个文件、目录信息节点
typedef struct fileinfo_s
{
    FILE_TYPE file_type;        // 文件类型
    char file_name[1024];       // 文件名
    size_t size;                // 文件大小，字节为单位
    // struct file_node_s *next;   // next指针
} fileinfo_t;

/*
 *  ls命令的查找结果, 包含所有的文件、目录信息
 *  其本质为一个fileinfo_t类型的数组，但显示地维护了一个数组长度信息: size
 */
typedef struct fileinfos_s
{
    fileinfo_t *files;      // 文件目录信息节点
    size_t size;            // 文件/目录个数
} fileinfos_t;

// 模拟ls命令返回值类型
typedef struct lsReturn_s
{
    bool exec_status;           // 命令执行状态，true: 成功 false: 失败
    char description[1024];     // 信息具体描述
    fileinfos_t filedirs;       // ls返回的文件、目录信息
} lsReturn_t;

#endif